延續前一天發現的問題,當已經按下變身鍵出現變身UI時,我預期應該要限制主角行動,這時候方向鍵只會操控變身UI的選項,然而主角還是會移動呢!
造成這個窘境的原因是因為,按下方向鍵時,操作移動的腳本及選擇變身的腳本同時都會讀取到這個輸入訊號,並同時作出兩個對應功能。
因此我們需要有個狀態機
來控管各狀態下能做的事情。
以下是我在BlueRemedy中有使用到的各項狀態,運作方式都一樣,在這邊我就以上述的問題為目標作介紹。
首先在Player物件下新增PlayerStatus腳本
變數有分兩類,一類是狀態(以is…作為命名開頭)、一類是可以作的事(我以can...作為開頭)
注意!記得將變數設為靜態公開,方便之後設定。
在Update中我會將所有can類先設為true,然後再依各個狀態,將對應的can類設為false
回到"變身狀態限制移動"這個情況為例,我可以設定為:當我正在"變身階段"時,判斷能否移動的變數為false。我已經設好一個變數叫做canMove及canJump,當isChanging正在變身時,他們兩個就會設為false
有了這個機制後回到PlayerChange中,並在按下變身鍵時設定isChanging=true,放開時為false。
再回到控制移動的PlayerControl,在移動時增加條件
###看看完成效果
完美!
或許有其他更專業的狀態機制作方式,而我使用的方式或許比較直接粗暴,但以這類小型專案來說還蠻方便管理及設定,讀者們不妨試試看喔!